MSD(Most Significant Digit)

높은 자릿수부터 정렬을 진행해 나가는 방식

주로 재귀적으로 구현된다.

특징

코드

def msd_radix_sort(arr):
    max_num = max(arr)
    max_digits = len(str(max_num))
    return msd_radix_sort_helper(arr, max_digits, 0, len(arr) - 1)

def msd_radix_sort_helper(arr, d, low, high):
    if low >= high or d == 0:
        return arr
    
    buckets = [[] for _ in range(10)]
    divisor = 10 ** (d - 1)
    
    for i in range(low, high + 1):
        digit = (arr[i] // divisor) % 10
        buckets[digit].append(arr[i])
    
    index = low
    for bucket in buckets:
        if len(bucket) > 1:
            msd_radix_sort_helper(bucket, d - 1, 0, len(bucket) - 1)
        for num in bucket:
            arr[index] = num
            index += 1
    
    return arr

# 사용 예
arr = [170, 45, 75, 90, 802, 24, 2, 66]
msd_radix_sort(arr)
print("MSD 정렬 결과:", arr)